package api

import (
	"gomain/app/model"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

type PermissionApi struct{}

// List 获取权限列表
func (a *PermissionApi) List(r *ghttp.Request) {
	page := r.Get("page", 1).Int()
	limit := r.Get("limit", 10).Int()
	name := r.Get("name").String()

	m := g.DB().Model("permissions")
	if name != "" {
		m = m.Where("name like ?", "%"+name+"%")
	}

	count, err := m.Count()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	var permissions []model.Permission
	err = m.Page(page, limit).Order("id desc").Scan(&permissions)
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code":  0,
		"msg":   "success",
		"count": count,
		"data":  permissions,
	})
}

// Get 获取权限信息
func (a *PermissionApi) Get(r *ghttp.Request) {
	id := r.Get("id")
	var permission *model.Permission
	err := g.DB().Model("permissions").Where("id", id).Scan(&permission)
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "success",
		"data": permission,
	})
}

// Add 新增权限
func (a *PermissionApi) Add(r *ghttp.Request) {
	var permission model.Permission
	if err := r.Parse(&permission); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	// 检查权限编码是否已存在
	count, err := g.DB().Model("permissions").Where("code", permission.Code).Count()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}
	if count > 0 {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  "权限编码已存在",
		})
		return
	}

	// 插入数据
	_, err = g.DB().Model("permissions").Data(permission).Insert()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "添加成功",
	})
}

// Update 更新权限
func (a *PermissionApi) Update(r *ghttp.Request) {
	var permission model.Permission
	if err := r.Parse(&permission); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	// 检查权限编码是否已存在(排除自己)
	count, err := g.DB().Model("permissions").
		Where("code", permission.Code).
		Where("id != ?", permission.Id).
		Count()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}
	if count > 0 {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  "权限编码已存在",
		})
		return
	}

	// 更新数据
	_, err = g.DB().Model("permissions").
		Where("id", permission.Id).
		Data(permission).
		Update()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "更新成功",
	})
}

// Delete 删除权限
func (a *PermissionApi) Delete(r *ghttp.Request) {
	id := r.Get("id")
	_, err := g.DB().Model("permissions").Where("id", id).Delete()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "删除成功",
	})
}

// BatchDelete 批量删除权限
func (a *PermissionApi) BatchDelete(r *ghttp.Request) {
	var ids []int
	if err := r.Parse(&ids); err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	_, err := g.DB().Model("permissions").WhereIn("id", ids).Delete()
	if err != nil {
		r.Response.WriteJson(g.Map{
			"code": 1,
			"msg":  err.Error(),
		})
		return
	}

	r.Response.WriteJson(g.Map{
		"code": 0,
		"msg":  "删除成功",
	})
}
